#ifndef _BTREE_H__
#define _BTREE_H__

#include<stddef.h>
typedef char eleType ;


typedef struct TreeNode{
    eleType val;
    struct TreeNode* left;   // 使用结构体标签而不是typedef别名
    struct TreeNode* right;  // 使用结构体标签而不是typedef别名
}TreeNode;

typedef struct Tree{ //二叉树的结构体
    TreeNode* nodes;//动态数组，存储了所以需要用的树节点 ，理解为节点池
    TreeNode* root;
    size_t nodeSize;//节点个数
}Tree;

void TreeInit(Tree* t,int size);//初始化树

void TreeDestroy(Tree* t);//销毁树

TreeNode* TreeGetNode(Tree* t,int id);//根据id获取树的节点地址

void Visit(TreeNode* n);//访问节点里的数据


TreeNode* createRecursively(Tree* t,eleType a[],int size,int nodeid,eleType nullnode );
//递归创建树(内部)

void TreeCreate(Tree* t,eleType a[],int size,eleType nullnode);
//递归创建树 调用给外部

void preOrder(Tree* t,TreeNode* node);//前序遍历树

void TreePreOrderTraversal(Tree* t);//实际给外部调用的前序遍历

void inOrder(Tree* t,TreeNode* node);//中序遍历树

void TreeInOrderTraversal(Tree* t);//实际个外部调用的中序遍历

void postOrder(Tree* t,TreeNode* node);//后序遍历树

void TreePostOrderTraversal(Tree* t);//实际给外部调用的后续遍历树

#endif